home *** CD-ROM | disk | FTP | other *** search
- # include <ingres.h>
- # include <symbol.h>
- # include <tree.h>
- # include <sccs.h>
-
- SCCSID(@(#)mapvars.c 8.1 12/31/84)
-
- /*
- ** MAPVARS -- remap varno's to be unique in 'tree' tree
- **
- ** A tree is scanned for VAR nodes; when found, the
- ** mapping defined in Qt.qt_remap[] is applied. This is done so that
- ** varno's as defined in trees in the 'tree' catalog will be
- ** unique with respect to varno's in the user's query tree. For
- ** example, if the view definition uses variable 1 and the user's
- ** query also uses variable 1, the routine 'readqry' will (after
- ** calling 'declare' to assign a new slot), put the index of this
- ** new slot into the corresponding entry of Qt.qt_remap;
- ** in this example, Qt.qt_remap[1] == 3. This routine does the actual
- ** mapping in the tree.
- **
- ** Parameters:
- ** tree -- pointer to tree to be remapped.
- **
- ** Returns:
- ** none
- **
- ** Side Effects:
- ** the tree pointed to by 'tree' is modified according
- ** to Qt.qt_remap[].
- **
- ** Trace Flags:
- ** 7.4-7.7
- */
-
- mapvars(tree)
- QTREE *tree;
- {
- register QTREE *t;
- register int i;
-
- t = tree;
- # ifdef xQTR3
- if (tTf(7, 4) && t != NULL && t->sym.type == ROOT)
- {
- printf("mapvars:");
- treepr(t);
- for (i = 0; i < MAXVAR + 1; i++)
- if (Qt.qt_rangev[i].rngvdesc != NULL && Qt.qt_remap[i] >= 0)
- printf("\t%d => %d\n", i, Qt.qt_remap[i]);
- }
- # endif
-
- while (t != NULL)
- {
- /* map right subtree */
- mapvars(t->right);
-
- /* check this node */
- if (t->sym.type == VAR)
- t->sym.value.sym_var.varno = Qt.qt_remap[t->sym.value.sym_var.varno];
-
- /* map left subtree (iteratively) */
- t = t->left;
- }
- }
-